import {Provide} from '@midwayjs/core';
import {InjectEntityModel} from "@midwayjs/typeorm";
import User from "../pojo/entity/user.entity";
import {Repository} from "typeorm";
import {UserInterface} from "../interface/User";
import {getSql} from "../utils/SqlSplicingUtil";

@Provide()
export class UserService {
  //这里我们直接去使用InjectEntityModel注解
  //就可以调用midwayjs帮我们写好的数据库方法
  //类似于mybatis-plus
  @InjectEntityModel(User)
  userModel: Repository<User>

  /**
   * 新增用户
   * @param user
   */
  async insertUser(user: UserInterface) {
    return await this.userModel.save(user);
  }

  async login(username:string,password:string){
    return await this.userModel.findOneBy({username,password})
  }

  /**
   * 更新用户
   * @param user
   */
  async updateUser(user: UserInterface) {
    // console.log(27, getSql(user));
    return await this.userModel.query(`update user set ${getSql(user)} where user_id=${user.userId}`);
    // return "执行SQL成功";
    // console.log(25, user);
    //  await this.userModel.update({
    //     //注意,这里的username不能进行修改
    //     nickname: user?.nickname,
    //     password: user?.password,
    //     avatar: user?.avatar,
    //     motto: user.motto,
    //
    //   },
    //   //sql中的where条件
    //   {userId: user.userId}
    // );
  }


  /**
   * 根据用户名进行查询
   * 这里我们单独提出来
   * 不再放入多个查询中
   * @param username
   */
  async selectUserByUsername(username: string) {
    return this.userModel.findBy({username});
  }

  /**
   * 根据昵称进行查询用户,支持模糊查询
   * 由于数据库字段不多,可查询的字段就两个
   * 所以这里我们不再写复合查询方法了
   */
  async selectUserByNickname(nickname: string) {
    return this.userModel.findBy({nickname});
  }

  /**
   * 根据userId删除用户
   */
  async deleteUserById(id: number) {
    return this.userModel.delete(id);
  }

  /**
   * 查询所有用户,无分页
   */
  async selectAllUser() {
    return await this.userModel.find();
  }


}
